{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# fit\n",
    "\n",
    "fit, fit_generator, train_on_batch是三个相似且独立的功能。  \n",
    "其中fit适用于新手玩家和简单场景，不能动态地操纵训练数据，有一定的局限性。例如：（1）要求整个训练集可以放入RAM （2）没有数据增强  \n",
    "fit_generator则可以解决以上的局限性，但使用略微复杂，需要根据实际情况定制数据生成函数。  \n",
    "train_on_batch则适用于高级玩家，它可以对Keras模型进行精细控制。  \n",
    "\n",
    "## 参数\n",
    "\n",
    "训练数据  \n",
    "epochs：epochs数，把所有数据过一遍为一个epoch  \n",
    "batch_size：batch的大小\n",
    "\n",
    "## 返回值\n",
    "\n",
    "history对象：包含loss信息和metrics中定义的信息\n",
    "\n",
    "## 打印\n",
    "\n",
    "默认画进度条  \n",
    "打印metrics中定义的信息  \n",
    "可以通过verbose控制信息量  \n",
    "\n",
    "# evaluate\n",
    "\n",
    "## 参数\n",
    "\n",
    "需要使用重新定义的数据集，不要使用训练数据集  \n",
    "\n",
    "## 返回值\n",
    "\n",
    "loss和metrics，不是history对象  \n",
    "\n",
    "## 打印\n",
    "\n",
    "同上\n",
    "\n",
    "# predict\n",
    "\n",
    "回归问题：直接输出预测值  \n",
    "二分类问题：输出的是1的概率，需要转成0或1  \n",
    "多分类问题：输出每个类别的概率，通过softmax()转换成分类结果，或用predict_classes直接得到分类结果\n",
    "\n",
    "```python\n",
    "model.predict(X)\n",
    "model.predict_classes(X)\n",
    "model.predict_proba(X)\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 统计迭代过程中的数据\n",
    "\n",
    "## step 1: 在compile中设置要统计的数据\n",
    "\n",
    "```python\n",
    "model.compile(loss='...', optimizer='...', metrics=['accuracy']) # 统计准确率\n",
    "```\n",
    "\n",
    "## step2：进行迭代\n",
    "\n",
    "```python\n",
    "# 统计信息都存在history中\n",
    "history = model.fit(X, y, epochs=...)\n",
    "```\n",
    "\n",
    "## step3: 读取统计信息\n",
    "\n",
    "```python\n",
    "history.history['loss']   # 一定有的信息\n",
    "history.history['accuracy']   # 、metrics中设置的信息\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 统计迭代过程中的验证数据\n",
    "\n",
    "## 设置验证集  \n",
    "\n",
    "方法一：  \n",
    "\n",
    "```python\n",
    "history = model.fit(X, y, epochs, validation_split=0.33)\n",
    "```\n",
    "\n",
    "方法二：  \n",
    "\n",
    "```python\n",
    "history = model.fit(X, y, epochs, validation_data=(ValX, ValY))\n",
    "```\n",
    "\n",
    "## 读取统计信息\n",
    "\n",
    "```python\n",
    "history.history['val_loss']  \n",
    "history.history['val_accuracy']\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
